home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_09_05
/
9n05104a
< prev
next >
Wrap
Text File
|
1991-03-19
|
1KB
|
50 lines
// This function solves Kepler's equation by the Newton
// method.
// Inputs: m -- mean anomaly
// e0 -- starting estimate for eccen anom
// e -- orbit eccentricity
// mi -- maximum number of iterations
// t -- stopping tolerance
// Outputs: sk returns the final estimate for eccen anom
// * Input m and e0 and output sk are in degrees. *
double sk(double m,double e0,double e,int mi,double t)
{
/* Solve Kepler's equation by the Newton method. */
double en,ep;
int i;
e0 = e0 * DTR;
m = m * DTR;
i = 0;
en = e0;
do {
i++;
ep = en;
// The next line of code is the Newton iteration:
// x(n+1) = x(n) - (1/(dy/dx)) * y(n).
en = en - (en - e*sin(en) - m)/(1 - e*cos(en)) ;
en = fmod(en,TWOPI);
if ( fabs(en-ep) < t) break;
} while (i <= mi );
return(en*RTD);
}
SAMPLE INPUT/OUTPUT
Initial eccentric anom = 0
Input mean anom = 286.879298
Input maximum its = 15
Input stop tolerance = 0.000001
Input eccentricity = 0.100000
Final eccentric anom = 281.260008
Mean anom computed from solution = 286.879298
This solution took five iterations; the solution E was
checked by plugging it back into Kepler's equation
and computing M.